import 'package:shared_preferences/shared_preferences.dart';

class SPUtils {
  // 获取单例
  static final SPUtils _instance = SPUtils._internal();
  factory SPUtils() => _instance;
  SPUtils._internal();

  // 保存实例引用，以便同步获取
  static SharedPreferences? _prefs;

  // 初始化方法，在应用启动时调用
  static Future<void> init() async {
    _prefs = await SharedPreferences.getInstance();
  }

  // 同步获取token（需要先调用init方法）
  static String getToken() {
    return _prefs?.getString('token') ?? '';
  }

  // 异步获取token
  static Future<String> getTokenAsync() async {
    final prefs = await SharedPreferences.getInstance();
    return prefs.getString('token') ?? '';
  }

  // 保存token
  static Future<void> saveToken(String token) async {
    final prefs = await SharedPreferences.getInstance();
    await prefs.setString('token', token);
  }

  // 清除token
  static Future<void> clearToken() async {
    final prefs = await SharedPreferences.getInstance();
    await prefs.remove('token');
  }

  // 保存用户信息
  static Future<void> saveUserInfo(Map<String, dynamic> userInfo) async {
    final prefs = await SharedPreferences.getInstance();
    await prefs.setString('userInfo', userInfo.toString());
  }

  // 同步获取用户信息
  static String getUserInfo() {
    return _prefs?.getString('userInfo') ?? '';
  }

  // 异步获取用户信息
  static Future<String> getUserInfoAsync() async {
    final prefs = await SharedPreferences.getInstance();
    return prefs.getString('userInfo') ?? '';
  }

  // 清除所有数据
  static Future<void> clearAll() async {
    final prefs = await SharedPreferences.getInstance();
    await prefs.clear();
  }
}